package world.hezi;

import java.lang.reflect.Field;

/**
 * @author wangzijian
 * @since 2022/11/3 17:43
 */
public interface AbstractBuilder <T> {
    /**
     * 构建目标对象
     * @return T
     */
    T build();

    /**
     * 通用的构建方法
     * @param value 要设置的值
     * @param fieldName 值的名
     * @return 建造者
     * @throws IllegalAccessException 类型错误
     */
    default AbstractBuilder <T> setField(String fieldName,Object value) throws IllegalAccessException {
        for (Field declaredField : this.getClass().getDeclaredFields()) {
            if (declaredField.getName().equals(fieldName)){
                declaredField.set(this,value);
            }
        }
        return this;
    }
}
